約 4,062,761 件
https://w.atwiki.jp/java_pro/pages/19.html
import java.io.*; public class Find1 { public static void main(String[] args){ if (args.length != 1) {//コマンドラインで入力した引数が間違っている System.out.println("使用方:java Find1 検索文字列 検索対象ファイル"); System.out.println("例:java Find1 System Find1.java"); System.exit(0);//プログラムを終了する。 } String findstr = args[0];//コマンドラインで入力された検索文字列を取得 System.out.println("検索文字は「" + findstr + "」です"); BufferedReader r = new BufferedReader(new InputStreamReader(System.in));//BufferedReaderを用意 try { String line;//ファイルからの読み込み用変数line int linenum = 1;//行数をカウントのための変数 while ((line = r.readLine()) != null){//一行取得、EOFなら終了する。 int n = line.indexOf(findstr);//indexOfメソッドでfindstrを検索。 if (n = 0) {//検索文字列が見つかったか? System.out.println(linenum + " " + line);//行の番号とその行を表示 } linenum++;//次の行へカウントする。 } } catch (IOException e) { System.out.println(e); } } }
https://w.atwiki.jp/api_programming/pages/183.html
前置き 地道な Get,Postの処理で認証を受けて、SpreadSheet の情報を取り出したりはできたものの、自前でClassをどんどん作って拡張させていく感じだったので、ライブラリつかいたひ、となって、そのためには、認証とかからこれを使ったほうが良いんじゃないか、ということで挑戦。ただ、Servletとしての説明が載った日本語のサイトがあんまりないので(GData以前はそれなりにある感じ)、いろいろ情報を見ながらトライ&エラーで作ってみた。 基本はここを参照したものの、初心者は四苦八苦。 Google API Client Libraries 流れ自体は通常の認証と変わらないものの、APIでいろいろやってくれる分、中身がわからないので、どこで何をしているのかわからん。 https //developers.google.com/identity/protocols/OAuth2 そして、作って、とりあえず使えそうな見通しがたったところで、 Google Identity Platform こっちの情報をさんしょうすれば、JavaAPIとかいらんかったのか?とか思いながら、まだちゃんと読んでいない。 とりあえずいろいろ集めた情報から サーブレットを使ったパターンとしては AbstractAppEngineAuthorizationCodeServlet.classを実装したクラスで、認証に必要な情報を載せて、リダイレクトさせるGoogleAuthorizationCodeFlow を内部で作って、使用している。上記のクラスを実装しなくても、本来はこれだけあればいい? 認証ページを表示させて、デフォルトで /oauth2callback にリダイレクトさせる。 codeをつけて、リダイレクトさせる。 AbstractAppEngineAuthorizationCodeCallbackServlet.classを実装したクラスで、結果を受ける。リダイレクトされたあとだから、イランと思ったら、ここでもGoogleAuthorizationCodeFlow を内部で作って処理していた。 認証に成功すると Credential がもらえる。 この認証後に、どのページからでも使える?ように access token を Cookie に保存して、再利用することにした。他のやり方がまだわからない。 実装までの四苦八苦 事前準備 使うサイト(Web App)を登録する作業は、Java API を使おうが使うまいが同じ。ここで Client ID とか、Client Secret とかを登録、確認しておく。 また、リダイレクト先も登録。ここで登録したリダイレクト先と、この先のプログラム上で指定しているリダイレクト先が違うとエラーになる。何もしないと多分 /oauth2callback がプログラム内で使用されるので、とりあえずこれを指定した(そしてそういうプログラムを作った)ほうが早いのでは? 認証ページを表示させるところまで。 AbstractAppEngineAuthorizationCodeServlet.classを実装。デベロッパサイトに注意書きとサンプルコートが。 注意:ログインしているユーザがいないと getUserID() が NullPointerException を投げる。- web.xml に次の記述がこんな感じの記述が必要。 security-constraint web-resource-collection web-resource-name any /web-resource-name url-pattern /* /url-pattern /web-resource-collection auth-constraint role-name * /role-name /auth-constraint /security-constraint role-nameの指定で、なんやかんやできるみたいだが。 このページのサンプルコードをそのまま使ったが、オーバーライドすべき initializeFlow 内での AuthorizationCodeFlowの生成で指定するGenericURLとかわからない。 しかしGoogleAuthorizationCodeFlowという拡張されたクラスがあって、こちらのBuilderクラスではGenericURLの指定はなく、代わりにClientID、ClientSecretの指定で済むので、こちらでインスタンスを作る。なお setApprovalPrompt("auto") setAccessType("offline") も指定してbuild() これで動かすとデータへのアクセス許可を聞くサイトへ飛んだ。 リダイレクト後(codeが発行された後の処理) 認証画面へのリダイレクトと同じように、コールバック用のサーブレットとしてAbstractAppEngineAuthorizationCodeCallbackServletを実装。 この中でもAuthorizationCodeFlowが出てくるが、やっぱりGoogleAuthorizationCodeFlowで実装。 このサーブレットでcodeを受け取ると、自動的に(flowがあるから?)access tokenとの交換をしてくれるらしい。オーバーライドする関数として onSuccess onError があって、成功していればonSuccessが処理される。ここの引数としてcredentialがあるので、getAccessTokenでトークンを保存しておけば、しばらくはこれを使ってAPIにアクセスできる。ただ、私は保存の仕方がわからなかったので、Cookieに保管している。 access tokenを受け取った後、実際にAPIを動かす 今回の主目的はSheets API、Calendar API だったので、とりあえずSheets APIで確認。 GoogleCredential gc = new GoogleCredential.Builder().build(); とやるだけで、勝手にどこかに保管されたaccess tokenとか拾ってくれるか、と思ったが、そこまで優しくない。(GoogleCredential.getAccessToken()はnullだったので)Cookieからaccess tokenを取り出して、credentialにセットして Sheets sheet = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, gc).setApplicationName(APPLICATION_NAME).build(); でオブジェクト作って、叩いたら、データ取り出せた。サンプルは[[Google Sheets API Java Quickstart https //developers.google.com/sheets/quickstart/java]]のmain内の部分。
https://w.atwiki.jp/limixp/pages/19.html
Java開発環境のインストールが済んだらさっそくプログラムを書いてみます. 本当にインストールできているかの確認にもなります. Hello World!プログラム プログラムから画面上に「Hello World!」と表示させるプログラムをJavaで作ります. プログラムを書くためにテキストエディタを用意する必要があります。Windows標準のメモ帳(notepad.exe)でも構いません. オススメなテキストエディタはTeraPadやSakura Editorが挙げられます. 仕様は以下の通りとします. クラス名は HelloWorld . 「Hello World!」を標準出力に出力する greetWorld()メソッド. HelloWorldクラスのインスタンスを生成し,greetWorld()メソッドを呼び出すmain()メソッド. public class HelloWorld{ public HelloWorld(){ //コンストラクタ } public void greetWorld(){ System.out.println("Hello World!"); } public static void main(String[] args){ HelloWorld instance = new HelloWorld(); instance.greetWorld(); } } これをHelloWorld.javaというファイル名で保存します. 保存先はC ドライブの直下に java というディレクトリを作成し, C \java\に保存します. 保存後,このプログラムをコンパイル~実行は以下のようにします. コマンドプロンプトを起動します. HelloWorld.javaのファイルがあるディレクトリにcdコマンドで移動します.cd C \java\ HelloWorld.javaをjavacコマンドでコンパイルします.javac HelloWorld.java するとHelloWorld.classというバイトコード(クラスファイル)が生成されます.dirコマンドで確認できます. クラスファイルをjavaコマンドで実行します.java HelloWorld 「Hello World!」と表示された成功です. もしjavacコマンドでエラーが出た場合はソースに誤りがあります. エラーの内容からソースの内容を良く確認し,コンパイルしなおしてください. 以上で最初のJavaプログラムは終わりです. トップページ
https://w.atwiki.jp/kanekotky/pages/14.html
Testing TestNG Testing EJB3 apps with TestNG Announcing TestNG 4.5 その他テスト ConTestを使用したマルチスレッド・ユニットのテスト ActiveMQ 4.0 release How to tune Apache ActiveMQ Tangosol http //www.tangosol.com/html/index.shtml クラスタ化アプリケーションのセッション管理 言語 Javaのオブジェクトサイズの測り方、sizeof 浅煎り珈琲 Java アプリケーション入門 PDF Javaアプリケーションから動的にPDFファイルを生成するiText Spring PetStore SpringPetstore JPetstore OrderForm must be Serializable 自動化 JavaOne Tokyo 2005 - 自動化、心掛けてますか? 貴重な時間は大切に DI Container DIxAOPコンテナ「Seasar2とSpring」 先進DIコンテナ「Apache Geronimo」、「HiveMind」を試す Using Dependency Injection in Java EE 5.0 Spring AOPサンプルアプリでAOPを理解する AOP aspectj project JBossAOP アスペクト指向のバリエーション解説 2004年末~2005年夏までの連載。少し古いのだが、AspectJ、JBossAOP、AspectWerkzについて解説。 AOPの理想と現実 java.lang.instrument java.lang.instrument JTA Javaの理論と実践 JTSを理解する -- 見えない魔法 Mustang jrunscriptビルトインオブジェクト一覧 Image I/O Improvements in Mustang JOnAS ObjectWeb Conference 2006 - ObjectWeb、次期JOnASでは自律機能を強化 ライブラリ Joda Time - Java date and time API性能等も考慮された日付処理ライブラリ JGraphJGraph is the most powerful, easy-to-use, feature-rich and standards-compliant open source graph component available for Java Tools IBM Thread and Monitor Dump Analyzer for Java Technology 他 Java WebSphere についてのいろいろ EHCache Hibernateでインテグレーション層のDAOデザインを考える MD5 cryptによるLinuxでのJavaアプリの保護 Gavin Kingが答えた「EJB 3.0がHibernate + Springより優れていると思う点」 Strutsで作るセキュアWebアプリケーション 【Jakarta/Apacheウォッチ】第25回 リリース間近!アーキテクチャを一新したStruts 1.3 Javaクラスの居場所 this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); BEA WebLogic Server 9 sets another SPECjAppServer2004 top mark The new features in Servlet 2.5 worthwhile? Tomcat Performance Higher on Linux Tapestry 4.0 Released Unit Testing Serialization Evolution Use EJB3 Persistence with Spring Java/J2EE Requirement Coverage Tool - JRequire V1.1 released Hibernate 3.1.1 released BEA to Open Source its Kodo Java Persistence APIs FIT plug-in for Maven released A New Java Persistence API for Berkeley DB Using EJB 3.0 outside the container AOP@Work AOP myths and realities published TrackIt 1.0.0, web-based project tracking tool, released Sun、JSR 292を提出 - Java仮想マシンレベルで動的な型を提案、他 GroovyによるRuby on Railsライクなフレームワーク - Grails 0.1公開 入力値検証用フレームワーク - Commons Validator 1.3.0、新バリデータ追加も Jakarta Commons IO Package 1.2 - ディレクトリごとコピー新機能も Configuration Management in Java EE Applications Using Subversion Strecks Strecks is a set of extensions to the Struts web development framework aimed at Java 5 users. The aim of Strecks is to enhance the capability of Struts in terms of productivity and maintainability. Strecks makes use of Java 5 language features, in particular JSR-175 annotations, to simplify the programming model for Struts applications. Javapedia Wicket -XX +HeapDumpOnOutOfMemoryError Javaバグに投票を Java例文集 for バグレポート JNIEasy
https://w.atwiki.jp/limixp/pages/14.html
Javaプラットフォームのエディションについて整理します. Java SE (バージョン 6.0 以降)Java Platform, Standard Edition. (バージョン 5 以前)Java 2 Platform, Standard Edition.俗にいうJ2SE. デスクトップマシン用. Java EE (バージョン 5.0 以降)Java Platform, Enterprise Edition. (バージョン 4 以前)Java 2 Platform, Enterprise Edition. 俗にいうJ2EE. Webサーバ用. Servlet, JSP, EJB, JNDI, JTAなどの機能を提供. Java ME Java Platform, Micro Edition. 携帯電話, PDA, テレビ用. バージョンの表記について Javaのバージョンを1.4.0や1.5.0と表記する場合と,4.0や5.0と表記する場合があります. 1.4.0というような表記は開発バージョンのことを指し,4.0という表記は製品バージョンのことを指しています.1.4.0と4.0は表記の方法が違うだけで全く同じバージョンを指していると思って良いと思います. トップページ
https://w.atwiki.jp/api_programming/pages/104.html
下位ページ Content HTTP通信文字化けが起きた パラメータの出力 レスポンスの「確認」 basic 認証 HTTP通信 接続先のURLへ情報を送信し、結果を保存する - @IT java.net.URL HttpURLConnection URLのインスタンスを作成。ここで接続先を指定する。 URLのインスタンスのopenConnectionで接続HttpURLConnectionを作成 パラメータはOutputStreamで出力するJavaによるHTTPリクエスト時のパラメータの渡し方 getResponceMessage()でレスポンスのボディを受け取る disconnect()で通信終了 URL url = new URL(strURL); HttpURLConnection con = (HttpURLConnection)url.openConnection(); connection.setDoOutput(true); connection.setUseCashes(false); connection.setRequestMethod("POST"); // 通信方法にPOSTを指定 // パラメータ送信 OutputStream os = uc.getOutputStream(); // POST用のOutputStreamを取得 PrintStream ps = new PrintStream(os); String postStr = "a=1 b=2 c=3"; ps.print(postStr);// データをPOSTする ps.close(); // 受信 InputStream is = uc.getInputStream(); // POSTした結果を取得 BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String s; while ((s = reader.readLine()) != null) { System.out.println(s); reader.close(); uc.disconnect(); } 文字化けが起きた しばらく何事もなかったのに、Toodledoで新しいタスクを作成する処理を行っているときに、iPhone経由でのタスク登録にて文字化けが発生。(iPhone以外では、日本語のタスクを作成しなかった、とかではないと思うが。。。) アラートで表示 OK サーバでの受取での表示 OK Toodledo での受取 NG なので、servlet→toodledoの送信でだめ?っぽい。 文字コードをセットできる場所として PrintStream 生成時に UTF-8 を追加 [[PrintStream(java.io.OutputStream, boolean, java.lang.String) https //docs.oracle.com/javase/jp/6/api/java/io/PrintStream.html#PrintStream(java.io.OutputStream, boolean, java.lang.String)]] で、正常動作(文字化け回避)になった。 パラメータの出力 パラメータはOutputStreamで出力する (HttpURLConnection).getOutputStream でもOutputStreamはバイト文字列で表記とか、使いづらい。 当初、PrintWriterクラスを使っていたが、日本語を使う必要が出た際に、文字化けで詰まったので、 OutputStreamWriterクラスを使うようにした。 OutputStreamWriter osw = new OutputStreamWriter(connection.gerOutputStream(),"UTF-8"); osw.write(str); osw.close(); OutputStreamWriter PrintWriterを使うのが便利。 JavaによるHTTPリクエスト時のパラメータの渡し方 レスポンスの「確認」 System.err.println(httpcon.getResponseCode()) // 戻り値はint System.err.println(httpcon.getResponseMessage()) getResponseCode() getResponseMessage() HTTPステータスコード - Wikipedia basic 認証 http //x68000.q-e-d.net/~68user/net/java-http-url-connection-2.html https //developer.android.com/reference/android/util/Base64.html http //www.programing-style.com/android/android-api/android-basic-authentication/ 正式な?方法があるらしいが、代替的な方法で、client_id と client_secret をパラメータとして渡す方法もあるらしい。
https://w.atwiki.jp/memcache/pages/23.html
ITPro Java技術最前線 SwingUnit VisualVM Snmp4J RMI ITPro Java技術最前線 URL http //itpro.nikkeibp.co.jp/article/COLUMN/20060915/248243/?ST=develop SwingUnit URL https //swingunit.dev.java.net/ VisualVM URL https //visualvm.dev.java.net/ Snmp4J URL http //www.snmp4j.org/ RMI RMI によるカスタムソケットファクトリの使用 http //java.sun.com/javase/ja/6/docs/ja/technotes/guides/rmi/socketfactory/index.html その他 http //www.ne.jp/asahi/hishidama/home/tech/java/j2ee/rmi.html http //d.hatena.ne.jp/nowokay/20060817#1155840591 http //d.hatena.ne.jp/muimy/20060831/1156996173 http //d.hatena.ne.jp/Kazzz/20080122/p1 http //www.edita.jp/trash/one/trash7431892.html http //www.02.246.ne.jp/~torutk/javahow2/rmi_nostub.html#doc1_id43 http //74.125.153.132/search?q=cache c1f2YwqqYSEJ www.hanatoyume.net/article.php/20090430190202197+RMI+java+6+stub cd=6 hl=ja ct=clnk gl=jp lr=lang_ja client=firefox-a http //www.google.co.jp/search?hl=ja client=firefox-a rls=org.mozilla%3Aja%3Aofficial hs=QgW q=RMI++stub+%E4%B8%8D%E8%A6%81 btnG=%E6%A4%9C%E7%B4%A2 lr=lang_ja aq=f oq=
https://w.atwiki.jp/java_pro/pages/20.html
import java.io.*; public class IndexOf { public static void main(String[] args){ String line; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { line = reader.readLine(); while (line != null){//lineがnullで無い限り繰り返す int n = line.indexOf("java");//indexOfメソッドで"java"を検索 if (n = 0){//indexOfメソッドの戻り値が0以上ならば(見つからない場合は-1を返す。) System.out.println("じゃばじゃば");//"じゃばじゃば"を表示 } line = reader.readLine();//次の入力 } } catch(IOException e) { System.out.println(e); } } }
https://w.atwiki.jp/yo-kichi/pages/83.html
スコーラとは Javaスコーラ2010まとめ 参考にして授業をやるかた、人に教える方へ 目標 プログラミングを楽しむ 自分でプログラムを作れるようになる TODO 現状ではこのwikiの情報を活用できない 情報の整理、集約が必要 javaスコーラ2010年度反省 2010年 ガイダンス HelloJava, 変数 条件分岐、繰り返し、変数続き 配列、繰り返し 今までの復習 クラスとメソッド メソッドの種類 コンストラクタ、メソッドの使い方 GUIを使ったプログラム カプセル化 問題集 ゲーム 問題続き 夏休みの予定を決める 問題集・ゲーム続き 夏休みJavaスコーラ特設ページ 後期ガイダンス 復習とOOP OOPなプログラムを読もう 継承 スレッド ソート、スタック データ構造(Listなど) AppletでGUI Timerつくってみるテスト 前回と同じ 復習 復習とプログラムの改良 自分で考えて作るプログラム 自分で考えて作るプログラム2 スコーラwikiテンプレ **今回の目標 **役割り分担, 内容 **検討中 **準備 **宿題 問題と答え **反省 備考 スコーラノートPCを持っていく プログラミングに慣れるまで、エディタで。 準備の心得 用語 オブジェクト指向ってなによ 括弧の呼び方 ひらめいたときようページ コメント、意見など Java スコーラ 2010
https://w.atwiki.jp/naobe/pages/25.html
言語に戻る EJB JavaEE5 MBean JMX JNDI サーブレット 言語仕様 項目 説明 transient 修飾子。Seriariseオブジェクトの保管しないフィールドを修飾する。 クラスローダ http //www.techscore.com/tech/Java/JavaEE/Servlet/supplement-1/ 参照 目的 同じ名前でバージョンの異なるクラスを使用するために使う。クラスローダが異なればバージョンが異なっても良い。自分自身のクラスローダを得るにはgetClassLoader()メソッドを用いる。 クラスローダには親子関係があり、子クラスローダがクラスをロードするときには、親クラスローダにロードを依頼してロードできなければ、子クラスローダがロードする。 Class#getClassLoader()は、このクラスをロードしたクラスローダを返す クラスローダによってロードされたClassはパーマネント領域に格納される。ClassLoaderがGCされるとGCから解放される。 VMのクラスローダ ブートストラップクラスローダ JAVA_HOME /lib下のJARファイルに含まれるクラスをロードする。JDK6は、 JAVA_HOME /jre/lib下? 親はいない 拡張クラスローダ JAVA_HOME /lib/ext下のJARファイルに含まれるクラスをロードする。JDK6は、 JAVA_HOME /jre/lib/ext下?親はいない システムクラスローダ CLASSPATHで指定した位置からクラスをロードする。親は拡張クラスローダ。ブートストラップクラスローダは親子関係なしでも委譲されるということでは? 通常のnew Foo()ではこのクラスローダが使われる。 ブートストラップクラスローダ、拡張クラスローダ、システムクラスローダの順番でクラスをロードする。 コンテキストクラスローダ(JDK6 API Threadより) コンテキスト ClassLoader は、クラスおよびリソースをロードするときに、このスレッドで実行中のコードが使用するためにスレッドの作成側によって提供されます。コンテキスト ClassLoader が設定されていない場合、デフォルトでは親 Thread の ClassLoader コンテキストになります。通常、親スレッドのコンテキスト ClassLoader は、アプリケーションのロードに使用されるクラスローダーに設定されます。 なので、設定しなければシステムクラスローダがコンテキストクラスローダになる。 コンテキスト・クラスローダを設定・取得するには、java.lang.Thread#setContextClassLoader,getContextClassLoaderメソッドを使う。 クラスローダ作成 JDK6 APIより たとえば、アプリケーションはネットワーククラスローダーを作成して、サーバーからクラスファイルをダウンロードできます。コードは次のようになります。 ClassLoader loader = new NetworkClassLoader(host, port); Object main = loader.loadClass("Main", true).newInstance(); . . . ネットワーククラスローダーのサブクラスは、ネットワークからクラスをロードするために findClass メソッドと loadClassData メソッドを定義しなければなりません。クラスを作成するバイトを一度ダウンロードしたら、defineClass メソッドを使ってクラスインスタンスを生成する必要があります。実装の例を次に示します。 class NetworkClassLoader extends ClassLoader { String host; int port; public Class findClass(String name) { byte[] b = loadClassData(name); return defineClass(name, b, 0, b.length); } private byte[] loadClassData(String name) { // load the class data from the connection . . . } } 特定のディレクトリからクラスをロードするクラスローダを作成してみる。 MyClassLoaderのmainメソッドで、test.MyClassLoaderTargetをロードしClassを作成する MyClassLoaderはClassLoaderを継承したクラスで、loadClassメソッドをオーバライドし、c /mydoc/tmp/を優先的にロードするディレクトリとしている。c /mydoc/tmp/にクラスがない場合は、ClassLoaderのloadClassメソッドを実行する ClassLoaderのloadClassメソッドでは、キャッシュにあれば、そのクラスを返す。なければ親クラスローダに移譲する。なければシステムクラスローダを使ってクラスをロードする Class#newInstance()を実行して、インスタンスを生成する MyClassLoaderTarget#execute()を実行し、MyClassLoaderTarget2をnewしてexecute()を実行する 実行結果を見ると、MyClassLoaderTarget2のクラスローダは、MyClassLoaderであることがわかる。つまりクラスローダを使ってロードしたクラスから別のクラスをnewするときはそのクラスローダを使うことがわかる。クラスローダを作成すると親クラスローダはシステムクラスローダになる。 コンテキストクラスローダは明示的に使用しない限り、使われることはなさそう。 package test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class MyClassLoader extends ClassLoader { private static final int BUFSIZE = 1024; private byte[] result; private int last = 0; @Override public Class ? loadClass(String name) throws ClassNotFoundException { Class ? c = null; try { c = findClass(name); } catch (ClassNotFoundException e) { c = super.loadClass(name); } return c; } private void dbg(String string) { System.out.println(string); } @Override protected Class ? findClass(String name) throws ClassNotFoundException { try { byte[] b = loadClassData(name); return defineClass(name, b, 0, b.length); } catch (Exception e) { throw new ClassNotFoundException(e.getMessage(), e); } } private byte[] loadClassData(String name) throws IOException { result = new byte[0]; last = 0; FileInputStream ins = null; try { byte[] buf = new byte[BUFSIZE]; int readSize = 0; name = name.replace( . , / ); File classFile = new File("c /mydoc/tmp/" + name + ".class"); ins = new FileInputStream(classFile); while((readSize = ins.read(buf)) != -1 ) { moveToResult(readSize, buf); } return result; } finally { if(ins != null) { ins.close(); } } } private void moveToResult(int readSize, byte[] buf) { byte[] tmp = new byte[last + readSize]; // 結果バイト配列をtmp配列の先頭にコピー System.arraycopy(result, 0, tmp, 0, result.length); // bufをtmp配列にコピー System.arraycopy(buf, 0, tmp, last, readSize); result = tmp; last += readSize; } public static void main(String[] args) { try { MyClassLoader loader = new MyClassLoader(); System.out.println("parent " + loader.getParent().getClass().getName()); Class ? clazz = loader.loadClass("test.MyClassLoaderTarget"); System.out.println("target class loader name " + clazz.getClassLoader().getClass().getName()); ((Executor)clazz.newInstance()).execute(); } catch (Exception e) { e.printStackTrace(); } } } package test; public class MyClassLoaderTarget implements Executor { @Override public void execute() { System.out.println("AAA"); MyClassLoaderTarget2 target2 = new MyClassLoaderTarget2(); target2.execute(); System.out.println("target2 class loader name " + target2.getClass().getClassLoader().getClass().getName()); } public static void main(String[] args) { MyClassLoaderTarget target = new MyClassLoaderTarget(); target.execute(); } } package test; public class MyClassLoaderTarget2 implements Executor { @Override public void execute() { System.out.println("BBB"); } public static void main(String[] args) { MyClassLoaderTarget2 target = new MyClassLoaderTarget2(); target.execute(); } } package test; public interface Executor { public void execute(); } 実行結果 parent sun.misc.Launcher$AppClassLoader target class loader name test.MyClassLoader AAA BBB target2 class loader name test.MyClassLoader ThreadLocal スレッドに固有のオブジェクトを保管するために使う(Thread Singleton)。Servletの中で、使用例としてDBに対するConnectionをスレッド毎に保管する場合があげられる。この場合、引数にConnectionを作成すると全てのメソッドにConnectionの引数が必要になり手間がかかる。スレッドにプライベートフィールドを作成して保管できないときに使える。 JDBC 参照 タイプ 説明 備考 type2 ベンダのライブラリと共同して、DBと通信。ベンダのクライアントアプリが必要。 type4 直接DBと通信。JDBCドライバサイズが大きい バッチ insert, updateが連続して行われるときにネットワークトラフィックを削減するために使う。PreparedStatementオブジェクトに対して、addBatch(), executeBatch()メソッドを使うと複数のステートメントをまとめてDBサーバ送信する。 言語コード コード名 説明 Windows-31J ShiftJISの拡張。NEC特殊コードもサポート。 スレッドダンプ 稼働中のスレッドを標準出力にダンプする。 kill -3 プロセス番号 出力例 daemon以外のスレッドを見る。以下の例ではSNMP APIで停止している。 Full thread dump Java HotSpot(TM) Server VM (11.2-b01 mixed mode) "RMI Scheduler(0)" daemon prio=10 tid=0x0955e000 nid=0x15db waiting on condition [0x30cd1000..0x30cd1fa0] java.lang.Thread.State TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for 0x37f243d8 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java 198) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java 1963) at java.util.concurrent.DelayQueue.take(DelayQueue.java 164) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java 583) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java 576) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java 947) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java 907) at java.lang.Thread.run(Thread.java 619) "Thread-7" prio=10 tid=0x0954bc00 nid=0x15bf in Object.wait() [0x30eb7000..0x30eb7ea0] java.lang.Thread.State TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on 0xa89ec300 (a com.adventnet.snmp.snmp2.SnmpCallback) at com.adventnet.snmp.snmp2.SnmpCallback.sleepUntilNotified(SnmpCallback.java 166) - locked 0xa89ec300 (a com.adventnet.snmp.snmp2.SnmpCallback) at com.adventnet.snmp.snmp2.SnmpCallback.run(SnmpCallback.java 152) アノテーション 注釈。プログラムに影響を与えない。プログラムから読める。コンパイラの動作に影響を与える。 @Override Overrideアノテーションを付加したメソッドがオーバライドメソッドでなければコンパイルエラーになる。 @SuppressWarning Xlintを指定したときに発生する警告メッセージを抑制する。 アプレット jarファイルを指定するには、ARCHIVEタグを使う。CLASSPATHはきかない。 セキュリティポリシー java.policyファイルの構文 grant signedBy "signer_names", codeBase "URL", principal principal_class_name "principal_name", principal principal_class_name "principal_name", ... { permission permission_class_name "target_name", "action",signedBy "signer_names"; permission permission_class_name "target_name", "action",signedBy "signer_names"; ... }; ここで、"signer_names"、"URL"、principal_class_name、"principal_name"、permission_class_name、"target_name"、"action"、"signer_names"は、変数。 signedBy 、codeBase、、principal は省略可能。 意味は、signer_namesで署名されたURLにあるプログラムが、permission_class_nameで規定されるtarget_nameに対して、actionすることを許可する。target_name, actionについては、permission_class_nameのAPIを参照。 http //java.sun.com/j2se/1.5.0/ja/docs/ja/guide/security/PolicyFiles.html 参照。 例 permission java.io.FilePermission "\\\\192.168.1.40\\-", "read,write"; 192.168.1.40のリモートファイルに対する読み書きを許可する。 Linux firefoxへのJava Plugin インストール 例 # ln -s /usr/java/jdk1.6.0_20/jre/lib/i386/libnpjp2.so /opt/firefox/plugins インストールの確認 urlにabout pluginsを設定して開く Linuxでのplugin コントロールパネル 起動 $JAVA_HOME/bin/ControlPanel を実行 最大メモリ容量の修正 "-XX MaxPermSize=256m"をJavaタブのアプレットパラメータに追加 その他 スタックトレースをStringに変換する 仕事の都合で、最後の行で改行を削除してタブをスペースに変換している。 private String getStackTraceAsString(Exception e) { ByteArrayOutputStream ostream = new ByteArrayOutputStream(100); e.printStackTrace(new PrintStream(ostream)); String sep = System.getProperty("line.separator"); return ostream.toString().replaceAll(sep, "").replace("\t", " "); } 固定長レコードのファイルを出力 package test; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; public class SingleFille { private BufferedOutputStream bstream; /** * ファイルに書き込むデータ * 桁数 * 内容 */ private String[][] data = { {"aaa1", "bbb1", "ccc1"}, {"漢字2", "bbb2", "ccc2"}, {"aaa3", "漢字3", "ccc3"}, {"aaa4", "bbb4", "漢字4"}, }; /** 列の桁数 */ private int[] length = {10, 20, 30}; /** ファイルオフセット */ private int offset = 0; private static final String FILE_PATH = "singleFile.dat"; public static void main(String[] args) { SingleFille sfile = new SingleFille(); try { sfile.execute(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void execute() throws IOException { File file = new File(FILE_PATH); try { FileOutputStream stream = new FileOutputStream(file); bstream = new BufferedOutputStream(stream); for(int i = 0; i data.length; i++) { String[] line = data[i]; putFile(line); } } catch (IOException e) { throw e; } finally { if(bstream != null) { try { bstream.close(); } catch (IOException e) { throw e; } } } } /** * @param line * @throws IOException */ private void putFile(String[] line) throws IOException { for(int i = 0; i line.length; i++) { //各列を桁数になるように整形 byte[] term = createTerm(line[i], i); bstream.write(term); offset += term.length; } } /** * @param term * @param index * @return * @throws UnsupportedEncodingException */ private byte[] createTerm(String term, int index) throws UnsupportedEncodingException { //項目を格納するバイト byte[] outterm = new byte[length[index]]; //項目をShift_JISのバイトに変換 byte[] interm = term.getBytes("SJIS"); for(int i = 0; i outterm.length; i++) { if( i interm.length) { outterm[i] = interm[i]; } else { //残りはスペース outterm[i] = 0x20; } } return outterm; } }